<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>refl-cpp: refl::runtime Namespace Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  $(document).ready(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">refl-cpp
   </div>
  </td>
   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
</td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('namespacerefl_1_1runtime.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a>  </div>
  <div class="headertitle">
<div class="title">refl::runtime Namespace Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>Contains utilities that can have runtime-overhead (like proxy, debug, invoke)  
<a href="namespacerefl_1_1runtime.html#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrefl_1_1runtime_1_1proxy.html">proxy</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A proxy object that has a static interface identical to the reflected functions and fields of the target.  <a href="structrefl_1_1runtime_1_1proxy.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a06e1996b05966eac4f282b6656169d6a"><td class="memTemplParams" colspan="2">template&lt;typename CharT , typename T &gt; </td></tr>
<tr class="memitem:a06e1996b05966eac4f282b6656169d6a"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1runtime.html#a06e1996b05966eac4f282b6656169d6a">debug</a> (std::basic_ostream&lt; CharT &gt; &amp;os, const T &amp;value, bool compact=false)</td></tr>
<tr class="separator:a06e1996b05966eac4f282b6656169d6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad3ba25f8e5e09bd30234c28839ec6d7c"><td class="memTemplParams" colspan="2">template&lt;typename CharT , typename T &gt; </td></tr>
<tr class="memitem:ad3ba25f8e5e09bd30234c28839ec6d7c"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1runtime.html#ad3ba25f8e5e09bd30234c28839ec6d7c">debug</a> (std::basic_ostream&lt; CharT &gt; &amp;os, const T &amp;value, [[maybe_unused]] bool compact)</td></tr>
<tr class="memdesc:ad3ba25f8e5e09bd30234c28839ec6d7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes the debug representation of value to the given std::ostream.  <a href="namespacerefl_1_1runtime.html#ad3ba25f8e5e09bd30234c28839ec6d7c">More...</a><br /></td></tr>
<tr class="separator:ad3ba25f8e5e09bd30234c28839ec6d7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab63a0044074e3c5a78f8e8a2662783aa"><td class="memTemplParams" colspan="2">template&lt;typename CharT , typename... Ts&gt; </td></tr>
<tr class="memitem:ab63a0044074e3c5a78f8e8a2662783aa"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1runtime.html#ab63a0044074e3c5a78f8e8a2662783aa">debug_all</a> (std::basic_ostream&lt; CharT &gt; &amp;os, const Ts &amp;... values)</td></tr>
<tr class="memdesc:ab63a0044074e3c5a78f8e8a2662783aa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes the compact debug representation of the provided values to the given std::ostream.  <a href="namespacerefl_1_1runtime.html#ab63a0044074e3c5a78f8e8a2662783aa">More...</a><br /></td></tr>
<tr class="separator:ab63a0044074e3c5a78f8e8a2662783aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:add62a33c7bf6980c9e6d6e5a8977540e"><td class="memTemplParams" colspan="2">template&lt;typename CharT  = char, typename T &gt; </td></tr>
<tr class="memitem:add62a33c7bf6980c9e6d6e5a8977540e"><td class="memTemplItemLeft" align="right" valign="top">std::basic_string&lt; CharT &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1runtime.html#add62a33c7bf6980c9e6d6e5a8977540e">debug_str</a> (const T &amp;value, bool compact=false)</td></tr>
<tr class="memdesc:add62a33c7bf6980c9e6d6e5a8977540e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes the debug representation of the provided value to an std::string and returns it.  <a href="namespacerefl_1_1runtime.html#add62a33c7bf6980c9e6d6e5a8977540e">More...</a><br /></td></tr>
<tr class="separator:add62a33c7bf6980c9e6d6e5a8977540e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a57bcab18d57d392f64fea2a46717d47b"><td class="memTemplParams" colspan="2">template&lt;typename CharT  = char, typename... Ts&gt; </td></tr>
<tr class="memitem:a57bcab18d57d392f64fea2a46717d47b"><td class="memTemplItemLeft" align="right" valign="top">std::basic_string&lt; CharT &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1runtime.html#a57bcab18d57d392f64fea2a46717d47b">debug_all_str</a> (const Ts &amp;... values)</td></tr>
<tr class="memdesc:a57bcab18d57d392f64fea2a46717d47b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes the compact debug representation of the provided values to an std::string and returns it.  <a href="namespacerefl_1_1runtime.html#a57bcab18d57d392f64fea2a46717d47b">More...</a><br /></td></tr>
<tr class="separator:a57bcab18d57d392f64fea2a46717d47b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0831da0114fa506579224ce219d0ab50"><td class="memTemplParams" colspan="2">template&lt;typename U , typename T , typename... Args&gt; </td></tr>
<tr class="memitem:a0831da0114fa506579224ce219d0ab50"><td class="memTemplItemLeft" align="right" valign="top">U&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1runtime.html#a0831da0114fa506579224ce219d0ab50">invoke</a> (T &amp;&amp;target, const char *name, Args &amp;&amp;... args)</td></tr>
<tr class="memdesc:a0831da0114fa506579224ce219d0ab50"><td class="mdescLeft">&#160;</td><td class="mdescRight">Invokes the specified member with the provided arguments.  <a href="namespacerefl_1_1runtime.html#a0831da0114fa506579224ce219d0ab50">More...</a><br /></td></tr>
<tr class="separator:a0831da0114fa506579224ce219d0ab50"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:a10ea7c32cad8eb5cc0512f774a65da04"><td class="memTemplParams" colspan="2">template&lt;typename Derived , typename Target &gt; </td></tr>
<tr class="memitem:a10ea7c32cad8eb5cc0512f774a65da04"><td class="memTemplItemLeft" align="right" valign="top">struct <a class="el" href="refl_8hpp.html#adc29b89a87a223da5f194d5918ba94f5">REFL_DETAIL_FORCE_EBO</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1runtime.html#a10ea7c32cad8eb5cc0512f774a65da04">proxy</a></td></tr>
<tr class="separator:a10ea7c32cad8eb5cc0512f774a65da04"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Contains utilities that can have runtime-overhead (like proxy, debug, invoke) </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="ad3ba25f8e5e09bd30234c28839ec6d7c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad3ba25f8e5e09bd30234c28839ec6d7c">&#9670;&nbsp;</a></span>debug() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename CharT , typename T &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void refl::runtime::debug </td>
          <td>(</td>
          <td class="paramtype">std::basic_ostream&lt; CharT &gt; &amp;&#160;</td>
          <td class="paramname"><em>os</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const T &amp;&#160;</td>
          <td class="paramname"><em>value</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">[[maybe_unused] ] bool&#160;</td>
          <td class="paramname"><em>compact</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Writes the debug representation of value to the given std::ostream. </p>
<p>Calls the function specified by the debug&lt;F&gt; attribute whenever possible, before falling back to recursively interating the members and printing them. Takes an optional arguments specifying whether to print a compact representation. The compact representation contains no newlines. </p>

</div>
</div>
<a id="a06e1996b05966eac4f282b6656169d6a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a06e1996b05966eac4f282b6656169d6a">&#9670;&nbsp;</a></span>debug() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename CharT , typename T &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void refl::runtime::debug </td>
          <td>(</td>
          <td class="paramtype">std::basic_ostream&lt; CharT &gt; &amp;&#160;</td>
          <td class="paramname"><em>os</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const T &amp;&#160;</td>
          <td class="paramname"><em>value</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>compact</em> = <code>false</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

</div>
</div>
<a id="ab63a0044074e3c5a78f8e8a2662783aa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab63a0044074e3c5a78f8e8a2662783aa">&#9670;&nbsp;</a></span>debug_all()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename CharT , typename... Ts&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void refl::runtime::debug_all </td>
          <td>(</td>
          <td class="paramtype">std::basic_ostream&lt; CharT &gt; &amp;&#160;</td>
          <td class="paramname"><em>os</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Ts &amp;...&#160;</td>
          <td class="paramname"><em>values</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Writes the compact debug representation of the provided values to the given std::ostream. </p>

</div>
</div>
<a id="a57bcab18d57d392f64fea2a46717d47b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a57bcab18d57d392f64fea2a46717d47b">&#9670;&nbsp;</a></span>debug_all_str()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename CharT  = char, typename... Ts&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">std::basic_string&lt;CharT&gt; refl::runtime::debug_all_str </td>
          <td>(</td>
          <td class="paramtype">const Ts &amp;...&#160;</td>
          <td class="paramname"><em>values</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Writes the compact debug representation of the provided values to an std::string and returns it. </p>

</div>
</div>
<a id="add62a33c7bf6980c9e6d6e5a8977540e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#add62a33c7bf6980c9e6d6e5a8977540e">&#9670;&nbsp;</a></span>debug_str()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename CharT  = char, typename T &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">std::basic_string&lt;CharT&gt; refl::runtime::debug_str </td>
          <td>(</td>
          <td class="paramtype">const T &amp;&#160;</td>
          <td class="paramname"><em>value</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>compact</em> = <code>false</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Writes the debug representation of the provided value to an std::string and returns it. </p>
<p>Takes an optional arguments specifying whether to print a compact representation. The compact representation contains no newlines. </p>

</div>
</div>
<a id="a0831da0114fa506579224ce219d0ab50"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0831da0114fa506579224ce219d0ab50">&#9670;&nbsp;</a></span>invoke()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename U , typename T , typename... Args&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">U refl::runtime::invoke </td>
          <td>(</td>
          <td class="paramtype">T &amp;&amp;&#160;</td>
          <td class="paramname"><em>target</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Args &amp;&amp;...&#160;</td>
          <td class="paramname"><em>args</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Invokes the specified member with the provided arguments. </p>
<p>When used with a member that is a field, the function gets or sets the value of the field. The list of members is initially filtered by the type of the arguments provided. THe filtered list is then searched at runtime by member name for the specified member and that member is then invoked by operator(). If no match is found, an std::runtime_error is thrown. </p>

</div>
</div>
<h2 class="groupheader">Variable Documentation</h2>
<a id="a10ea7c32cad8eb5cc0512f774a65da04"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a10ea7c32cad8eb5cc0512f774a65da04">&#9670;&nbsp;</a></span>proxy</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Derived , typename Target &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="refl_8hpp.html#adc29b89a87a223da5f194d5918ba94f5">REFL_DETAIL_FORCE_EBO</a> <a class="el" href="structrefl_1_1runtime_1_1proxy.html">refl::runtime::proxy</a></td>
        </tr>
      </table>
</div><div class="memdoc">

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="namespacerefl.html">refl</a></li><li class="navelem"><a class="el" href="namespacerefl_1_1runtime.html">runtime</a></li>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
  </ul>
</div>
</body>
</html>
